﻿package game.login {
	import game.objects.GameObject;
	import game.errors.GameError;
	import game.debug.Debug;
	import game.socket.*;
	import flash.events.ProgressEvent;
	import game.socket.packages.*;
	import game.objects.AutoObject;
	
	public class Login extends GameObject {
		
		public static const STEPS:int	= 4;
		
		public var progress:Number = 0;
		
		public function Login ():void {
			
			socket.addEventListener ( SocketEvent.POLICY, policyHandler);
			socket.addEventListener ( SocketHandler.RECIVE, socketRecive);
			
		}
		
		private function step(value:int):void { 
			progress = value/STEPS;
			dispatchEvent( new ProgressEvent ( ProgressEvent.PROGRESS ) );
			switch (value) {
				case 1: //запрос файловой политики
					socket.getPolicy();
				break;
				case 2: //авторизация на сервере
					socket.send ( Sockets.LOGIN, LOGIN.write(config.me.network, config.me.uid) );
				break;
				case 3:
					//ждем получение машин
				break;
				case STEPS: //все загрузилось
					dispatchEvent( new LoginEvent ( LoginEvent.LOGINED ) );
				break;
			}
		}
		
		public function start():void {
			debug('Запрос файловой политики', Debug.SOCKET);
			step(1);
		}
		
		private function policyHandler(event:SocketEvent):void {
			debug('Получена файловая политика', Debug.SOCKET);
			step(2);
		}
		
		private function socketRecive(event:SocketHandler):void {
			if (event.socketPackage is LOGIN) {
				var login:LOGIN = event.socketPackage;
				if (login.error==0) {
					//применяем данные о себе с сервера
					config.me.id = login.id;
					step(3);
				} else {
					error(GameError.DATA_ERROR, 1, "", {code: login.error});
				}
			} else if (event.socketPackage is GETAUTO) {
				var getauto:GETAUTO = event.socketPackage;
				if (getauto.error!=1) {
					//вставляем машину в UserObject
					var auto:AutoObject = new AutoObject;
					auto.aid			= getauto.aid;
					auto.cid			= getauto.cid;
					auto.main			= getauto.main;
					auto.transmission	= getauto.transmission;
					config.me.autos.push(auto);
				}
					
				if (getauto.error==1 || (getauto.count==getauto.current+1))
					step(4);
			}
		}
		
	}
	
}